package cn.itcast.myapplication.adapter;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

import cn.itcast.myapplication.R;
import cn.itcast.myapplication.room.Word;
import cn.itcast.myapplication.viewemodel.WordViewModel;

/**
  *
  * 适配器
  *
  * */
public class WordAdapter extends RecyclerView.Adapter<WordAdapter.MyWordViewHolder> {

    private List<Word> words=new ArrayList<>();//数据源

    boolean useCardView;//判断是否是false，如果是则显示卡片布局

    private final WordViewModel wordViewModel;

    private Context context;

    private AlertDialog alertDialog;;

     //false是卡片布局 true是普通布局
    public WordAdapter(Context context,boolean useCardView,WordViewModel wordViewModel){

        this.context=context;

        this.useCardView=useCardView;

        this.wordViewModel=wordViewModel;

    }



    //设置数据源数据
    public void setAllWord(List<Word> words){

        this.words=words;

    }

    @NonNull
    @Override
    public MyWordViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        //填充布局
        LayoutInflater layoutInflater=LayoutInflater.from(parent.getContext());

        View itemView;

         //false显示卡片布局，true显示普通布局
        if (useCardView){

            itemView=layoutInflater.inflate(R.layout.cell_card,parent,false);

        }else {

            itemView=layoutInflater.inflate(R.layout.cell_normal_two,parent,false);

        }
        return new MyWordViewHolder(itemView);

    }

    @Override
    public void onBindViewHolder(@NonNull final MyWordViewHolder holder, @SuppressLint("RecyclerView") final int position) {

        final Word word=words.get(position);

        holder.textViewChinese.setText(word.getChineseMeaning());//设置中文文本

        holder.textViewEnglish.setText(word.getWord());//设置英文文本

        holder.textViewNumber.setText(String.valueOf(position+1));//设置ID

        /**
         *
         *  因为Recycler有回收机制，所以一开始没有设置Switch为空的话。
         *  当你触发Switch之后，滑动的时候会被默认取消掉Switch事件，或者没被触发的Switch事件自动触发。
         *  所以一开始要设置他为空 holder.switch2.setOnCheckedChangeListener(null);
         *   ListView Recyclerview
         *
         * */

        holder.switch2.setOnCheckedChangeListener(null);

        // 设置Switch按钮的状态。
        // 当它为true的时候，隐藏掉中文文本，显示英语文本
        // 当它为false的时候，显示中文文本

        if (word.isChineseInvisible()){

            holder.textViewChinese.setVisibility(View.GONE);

            holder.switch2.setChecked(true);

        }else {

            holder.textViewChinese.setVisibility(View.VISIBLE);

            holder.switch2.setChecked(false);

        }

        //长按删除单行数据
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {

                final Word word=words.get(position);

                //创建提醒对话框的建构器
                AlertDialog.Builder builder = new AlertDialog.Builder(context);

                //设置对话框的标题文本
                builder.setTitle("确定要删除数据吗？");

                //设置对话框的内容文本
                builder.setMessage("数据被删除后将无法恢复，请谨慎删除！！！");


                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int position) {

                       wordViewModel.deleteWord(word);

                    }
                });


                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                        alertDialog.hide();

                    }

                });

                //设置对话框肯定文本及按钮点击事件
                //根据建构器构建提醒对话框对象
                alertDialog = builder.create();

                alertDialog.show();

                return true;

            }
        });

        //点击item跳转到有道词典的页面，根据自己的英文单词查询
        holder.itemView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                Uri uri=Uri.parse("https://m.youdao.com/dict?le=eng&q="+holder.textViewEnglish.getText());//跳转有道词典的链接

                Intent intent=new Intent(Intent.ACTION_VIEW);//跳转动作

                intent.setData(uri);//设置数据

                holder.itemView.getContext().startActivity(intent);//跳转

            }

        });

        // 获取Switch按钮的状态。
        // 当它为true的时候，隐藏掉中文文本，显示英语文本
        // 当它为false的时候，显示中文文本
        holder.switch2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if (b){

                    holder.textViewChinese.setVisibility(View.GONE);

                    word.setChineseInvisible(true);

                    holder.textViewEnglish.setTextSize(28);

                }else{

                    holder.textViewChinese.setVisibility(View.VISIBLE);

                    word.setChineseInvisible(true);

                    holder.textViewEnglish.setTextSize(24);

                }

                wordViewModel.updateWord(word);

            }
        });

    }

    @Override
    public int getItemCount() {

        return words.size();

    }

    class MyWordViewHolder extends RecyclerView.ViewHolder{

        TextView textViewNumber,textViewEnglish,textViewChinese;

        Switch switch2;

      public MyWordViewHolder(@NonNull View itemView) {

          super(itemView);

          textViewChinese=itemView.findViewById(R.id.textViewChinese);//中文文本

          textViewEnglish=itemView.findViewById(R.id.textViewEnglish);//英文文本

          textViewNumber=itemView.findViewById(R.id.textViewNumber);//数字文本

          switch2=itemView.findViewById(R.id.switch2);//开关

       }

    }

 }